home *** CD-ROM | disk | FTP | other *** search
- /*-
- * NAME.C
- *
- * The knowledge of the file names used for tracks.
- *
- * $Id: name.c,v 1.3 1995/04/08 20:23:48 Rhialto Exp $
- * $Log: name.c,v $
- * Revision 1.3 1995/04/08 20:23:48 Rhialto
- * Add/correct version strings.
- *
- * Revision 1.2 1993/11/08 13:18:19 Rhialto
- * Add RCS tags.
- *
- *
- * This code is (C) Copyright 1993 by Olaf Seibert. All rights reserved.
- * May not be used or copied without a licence.
- -*/
- #include "xpkdisk.h"
- #include <stdio.h>
- #include <string.h>
- #include <ctype.h>
-
- extern struct DosLibrary *DOSBase;
-
- static const char rcsId[] = "$Id: name.c,v 1.3 1995/04/08 20:23:48 Rhialto Exp $";
- static const char Subdir[] = "Group_%04x_%c%c";
- static const char File[] = "Track_%04x_%c%c";
-
- #define HASHTABLESIZE 72 /* Must be less than 13*13 */
-
- Prototype int Hash(unsigned char *name);
-
- int
- Hash(unsigned char *name)
- {
- int val, len, i;
-
- val = len = strlen(name);
- for (i=0; i<len; i++)
- val = ((val*13) + (int)toupper(*name++)) & 0x7ff;
-
- return val;
- }
-
- int
- HashName(char *filename, char *pattern, int number, int hash)
- {
- int hh;
- int len;
-
- len = sprintf(filename, pattern, number, 'M', 'M');
- hh = (Hash(filename) - hash) % HASHTABLESIZE;
- filename[--len] -= hh % 13;
- filename[--len] -= hh / 13;
-
- return len + 2;
- }
-
- Prototype void NewName(char *filename, int track);
-
- void
- NewName(char *filename, int track)
- {
- int groupd = track / HASHTABLESIZE;
- int group = groupd * HASHTABLESIZE;
- int len;
-
- len = HashName(filename, Subdir, group, groupd % HASHTABLESIZE);
- filename += len;
- *filename++ = '/';
- HashName(filename, File, track, track % HASHTABLESIZE);
- }
-
- Prototype void MakeSubDirs(int mintrack, int maxtrack);
-
- void
- MakeSubDirs(int mintrack, int maxtrack)
- {
- char dirname[40];
- BPTR fl;
- int g;
- int gd;
-
- for (gd = mintrack / HASHTABLESIZE, g = gd * HASHTABLESIZE;
- g <= maxtrack;
- gd++, g += HASHTABLESIZE) {
- HashName(dirname, Subdir, g, gd % HASHTABLESIZE);
- if (fl = CreateDir(dirname))
- UnLock(fl);
- }
- }
-